# import pandas as pd
# import numpy as np
# # 创建初始DataFrame
############################################################################课后题
# dict_data = {
#     '姓名': ['赵文', '李蒙', '刘武', '何花'],
#     '职务': ['主管', '副主管', '员工', '员工'],
#     '基本工资': [8000, 7000, 5000, 5500],
#     '联系方式': ['15202369852', '15023695820', '13621358962', '13102659860']
# }
# index = ['1', '2', '3', '4']
# df = pd.DataFrame(dict_data, index)  # 存储员工信息
# # 添加新行（保持索引为字符串类型）
# df.loc['5'] = ['李华', '员工', 5200, '136xxxx235']  # 基本工资改为整数
# # 插入性别列
# df.insert(1, '性别', ['女', '男', '男', '女', '女'])
# # 修改职务（使用列名，且不包裹列表）
# df.loc['3', '职务'] = '副主管'
# print(df)


import pandas as pd
# dict = {'姓名': ['赵文', '李蒙', '刘武', '何花'],
#         '职务': ['主管', '副主管', '员工', '员工'],
#         '基本工资': [8000, 7000, 5000, 5500],
#         '联系方式': ['15202369852', '15023695820', '13621358962', '13102659860']}
# index = ['1', '2', '3', '4']
# df = pd.DataFrame(dict, index)    ##1.存储员工信息
# ##2.增加信息 --李华
# df.loc['5'] = ['李华', '员工', 5200, '13695621235']
#
# ##3.增加性别列
# df.insert(1, '性别', ['女', '男', '男', '女', '女'])
#
# ##4.修改 刘武的职位为副主管
# df.iat[2,2] = '副主管'
# ##df.iloc[2,2] = '副主'   功能同上
#
# print('所有员工信息：\n', df)    ##所有员工信息
#
# ##5.主管或副主管的信息
# print('主管或副主管的信息：\n', df.loc[(df['职务'] == '主管') | (df['职务'] == '副主管')])
#
# ## >=6000工资的人
# print('员工工资大于5000的信息：\n', df.loc[(df['基本工资'] >= 6000)])
#
# ##df.to_csv('employee.csv', encoding='GBK')


####################################################################### '实践3：'
# import numpy as np
# arr = np.zeros((8, 8), dtype='int')	#创建元素都为0的8×8的数组
# for i in range(8):
#     if i % 2 == 0:
#         arr[i][1:8:2] = 1				#将偶数行的黑格赋1
#     else:
#         arr[i][0:8:2] = 1				#将奇数行的黑格赋1
# for i in range(8):						#循环输出数组
#     for j in range(8):
#         print(arr[i][j], end='\t')
#     print()
############################################第三章##################################################################################################
#######################################################################检查缺失值
####################################################isnull()和notnull()
##################################3-1
# import pandas as pd
# df = pd.DataFrame({'商品': ['苹果','香蕉','梨'],
#                    '单价(元)':[5,5,4],
#                    '销量(kg)':[100,None,None],
#                    '库存(kg)':[50,None,None]})
# print('原始数据: \n',df)
# print('检查缺失值: \n',df.isnull())
# print('检查非缺失值: \n',df.notnull())
# print('统计每列缺失值: \n',df.isnull().sum())
##################################################################处理缺失值
##########################################dropna()
###############################3-2
#
# import pandas as pd
# df = pd.DataFrame({'商品': ['苹果','香蕉','梨'],
#                    '单价(元)':[5,5,4],
#                    '销量(kg)':[100,None,None],
#                    '库存(kg)':[50,None,70]})
# print('原始数据: \n',df)
# print('删除包含缺失值的行: \n',df.dropna())
# print('删除包含缺失值的列: \n',df.dropna(axis=1))
# print('删除少于3个非缺失值的行: \n',df.dropna(thresh=3))
# print('删除库存包含缺失值的行: \n',df.dropna(subset=['库存(kg)']))

######################################################fillna()
###############################3-3
# import pandas as pd
# df = pd.DataFrame({'商品': ['苹果','香蕉','梨'],
#                    '单价(元)':[5,5,4],
#                    '销量(kg)':[100,None,None],
#                    '库存(kg)':[50,None,70]})
# print('原始数据: \n',df)
# print('使用120替换所有缺失值: \n',df.fillna(120))
# print('使用120、60分别替代换销量、库存列的缺失值: \n',df.fillna({'销量(kg)':120, '库存(kg)':60}))
# print('删除少于3个非缺失值的行: \n',df.dropna(thresh=3))
# print('删除库存包含缺失值的行: \n',df.dropna(subset=['库存(kg)']))

#########################################重复值处理############################################################
######################################duplicated函数
############################3-4
# import pandas as pd
#
# df = pd.DataFrame({'商品': ['苹果', '香蕉', '梨','香蕉'],
#                    '单价(元)': [4, 5, 4, 5],
#                    '销量(kg)': [100, 120, 105, 120],
#                    '库存(kg)': [50, 60, 70, 60]})
# print('原始数据: \n', df)
# print('检查所有列的重复值: \n', df.duplicated())
# print('检查单价列的所有重复值,标记除包含重复值的第一行外其他包含重复值的行为Ture: \n', df.duplicated('单价(元)'))
# print('检查单价列的所有重复值,标记除包含重复值的最后一行外其他包含重复值的行为Ture: \n', df.duplicated('单价(元)', keep='last'))
# print('检查单价列的所有重复值,标记所有含重复值的行为Ture: \n', df.duplicated('单价(元)', keep=False))
#########################################删除重复值##################################################
##########################################drop_duplicate函数
#############################3-5
# import pandas as pd
#
# df = pd.DataFrame({'商品': ['苹果', '香蕉', '梨','香蕉'],
#                    '单价(元)': [4, 5, 4, 5],
#                    '销量(kg)': [100, 120, 105, 120],
#                    '库存(kg)': [50, 60, 70, 60]})
# print('原始数据: \n', df)
# print('删除单价列除包含重复值的第一行外其他包含重复值的行: \n',df.drop_duplicates('单价(元)'))
# print('删除单价列除包含重复值的最后一行外其他包含重复值的行: \n', df.drop_duplicates('单价(元)', keep='last'))
# print('删除除完全重复的第一行外其他完全重复的行: \n',df.drop_duplicates())
# print('删除所有完全重复的行: \n',df.drop_duplicates())
# print('删除所有完全重复的行，并重新设置连续行索引: \n',df.drop_duplicates(keep=False,ignore_index=True))
#############################################数据的横向合并################################################################
####################################################################merge()函数
##########################################3-6
# import numpy as np
# import pandas as pd
#
# arr = np.arange(1,10).reshape(3,3)
# df1 = pd.DataFrame(arr,columns=['a','b','c'])
# df1.insert(0,'key',['001','003','002'])
# print('左对象原始数据df1: \n',df1)
#
# arr2 = np.arange(10,14).reshape(2,2)
# df2 = pd.DataFrame(arr2,columns=['a','e'])
# df2.insert(0,'key',['001','004'])
# print('右对象原始数据df2: \n',df2)
#
# # 左合并，没有指定on参数，会自动根据相同列名合并
# df3 = pd.merge(df1,df2,how='left')
# print('已具有相同标签的所有列左合并的数据df3: \n',df3)
#
# # 修正了拼写错误和参数错误
# df4 = pd.merge(df1,df2,how='right',on='key')
# print('以key列右合并的数据df4: \n',df4)
#
# # 修正了注释错误
# df5 = pd.merge(df1,df2,how='inner',on='key',suffixes=('_1','_r'))
# print('以key列内合并的数据df5: \n',df5)
#
# df6 = pd.merge(df1,df2,how='inner',on='key',suffixes=('_1','_r'))
# print('以key列内合并,并设置附加后缀的数据df6: \n',df6)
#
# df7 = pd.merge(df1,df2,how='outer',on='key',sort=True)
# print('以key列外合并,并按连接列排序的数据df7: \n',df7)
###########################################################################################3-7
# import numpy as np
# import pandas as pd
#
# arr = np.arange(1,10).reshape(3,3)
# df1 = pd.DataFrame(arr,columns=['a','b','c'])
# df1.insert(0,'key',['001','003','002'])
# print('第一对象原始数据df1: \n',df1)
#
# arr2 = np.arange(10,14).reshape(2,2)
# # 修正：使用arr2而不是arr创建df2
# df2 = pd.DataFrame(arr2,columns=['a','e'])
# df2.insert(0,'key',['001','004'])
# print('第二对象原始数据df2: \n',df2)  # 同时修正了这里的打印文本
#
# # 纵向外合并（默认行为）
# df3 = pd.concat([df1,df2])
# print('纵向外合并的数据df3: \n',df3)
#
# # 纵向外合并，添加键标记来源，并按列排序
# df4 = pd.concat([df1,df2],keys=['df1','df2'],sort=True)
# print('纵向外合并,标记每个对象,并按列标签排序的数据df4: \n',df4)
#
# # 纵向内合并，只保留共同列，并重新索引
# df5 = pd.concat([df1,df2],join='inner',ignore_index=True)
# print('纵向内合并并重新设置连续行标签的数据df5: \n',df5)
##############################################################3-8
import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
df = pd.read_excel('1——3月入职员工信息.xlsx',index_col=0,sheet_name=['1月','2月','3月','1月员工补充信息'])
df1_1,df1_2=df['1月'],df['1月员工补充信息']
df2,df3=df['2月'],df['3月']
df1 = pd.merge(df1_1,df1_2)
df_total=pd.concat([df1,df2,df3],ignore_index=True)
print('1——3月入职员工信息: \n',df_total)
df_total.to_excel('1——3月入职员工信息.xlsx',index=False)
print('1——3月入职员工信息.xlsx')
